package git.soulbgm.common.function;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.TypeUtil;

import java.lang.reflect.Type;
import java.util.Collections;
import java.util.List;
import java.util.Map;

/**
 * 数据处理函数
 *
 * @author SoulBGM
 * @date 2024-11-04
 */
public abstract class DataHandleFunction<T> {

    /**
     * 转换
     *
     * @param list 列表
     * @return {@link List}<{@link T}>
     */
    public List<T> convert(List<Map<String, Object>> list) {
        Type type = TypeUtil.getTypeArgument(this.getClass());
        if (type != null) {
            return BeanUtil.copyToList(list, (Class<T>) type);
        }
        return Collections.emptyList();
    }

    /**
     * 是否统计后进行处理
     *
     * @return boolean
     */
    public boolean isStatisticsHandle() {
        return true;
    }

    /**
     * 统计数据后处理
     *
     * @param list 列表
     */
    public abstract void statisticsAfterHandle(List<T> list);

    /**
     * 是否聚合后进行处理
     *
     * @return boolean
     */
    public boolean isAggregationHandle() {
        return false;
    }

    /**
     * 聚合数据后处理
     *
     * @param list 列表
     */
    public void aggregationAfterHandle(List<T> list){};

    /**
     * 是否分组后进行处理
     *
     * @return boolean
     */
    public boolean isGroupHandle() {
        return false;
    }

    /**
     * 获得分组数据后处理
     *
     * @param list 列表
     */
    public void groupAfterHandel(List<T> list) {}
}
